import { NextResponse } from 'next/server'
import { getProductById, updateProduct, deleteProduct, incrementProductViewCount } from '@/lib/database'
import { validateProductForm, sanitizeProductData } from '@/lib/validation'
import { extractUserIdFromRequest } from '@/lib/rls-middleware'

/**
 * GET /api/products/[id] - 获取单个产品详情
 * 支持需求 1.3, 5.1, 5.3
 */
export async function GET(request, { params }) {
    try {
        const { id } = params

        // 验证 ID 格式
        if (!id || typeof id !== 'string') {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'INVALID_PRODUCT_ID',
                    message: '无效的产品 ID'
                }
            }, { status: 400 })
        }

        // 从请求中提取用户ID（用于RLS）
        const userId = extractUserIdFromRequest(request)

        // 获取产品详情
        const product = await getProductById(id, userId)

        if (!product) {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'PRODUCT_NOT_FOUND',
                    message: '产品不存在'
                }
            }, { status: 404 })
        }

        // 检查是否需要增加浏览量（通过查询参数和请求头控制）
        const { searchParams } = new URL(request.url)
        const shouldIncrementView = searchParams.get('increment_view') === 'true'
        const userAgent = request.headers.get('user-agent') || ''

        // 只有在明确请求增加浏览量且不是预取请求时才增加
        if (shouldIncrementView && !userAgent.includes('Next.js')) {
            // 增加浏览量（异步执行，不影响响应速度）
            incrementProductViewCount(id, userId).catch(error => {
                console.warn('增加浏览量失败:', error)
            })
        }

        return NextResponse.json({
            success: true,
            data: {
                product
            }
        })

    } catch (error) {
        console.error('获取产品详情失败:', error)

        return NextResponse.json({
            success: false,
            error: {
                code: 'FETCH_PRODUCT_FAILED',
                message: '获取产品详情失败',
                details: process.env.NODE_ENV === 'development' ? error.message : undefined
            }
        }, { status: 500 })
    }
}

/**
 * PUT /api/products/[id] - 更新产品信息
 */
export async function PUT(request, { params }) {
    try {
        const { id } = params

        // 验证 ID 格式
        if (!id || typeof id !== 'string') {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'INVALID_PRODUCT_ID',
                    message: '无效的产品 ID'
                }
            }, { status: 400 })
        }

        // 从请求中提取用户ID（用于RLS）
        const userId = extractUserIdFromRequest(request)

        // 检查产品是否存在
        const existingProduct = await getProductById(id, userId)
        if (!existingProduct) {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'PRODUCT_NOT_FOUND',
                    message: '产品不存在'
                }
            }, { status: 404 })
        }

        const body = await request.json()

        // 验证请求数据
        const validation = validateProductForm(body)
        if (!validation.isValid) {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'VALIDATION_ERROR',
                    message: '数据验证失败',
                    details: validation.errors
                }
            }, { status: 400 })
        }

        // 清理和格式化数据
        const productData = sanitizeProductData(body)

        // 更新产品
        const updatedProduct = await updateProduct(id, productData, userId)

        return NextResponse.json({
            success: true,
            data: {
                product: updatedProduct,
                message: '产品更新成功'
            }
        })

    } catch (error) {
        console.error('更新产品失败:', error)

        return NextResponse.json({
            success: false,
            error: {
                code: 'UPDATE_PRODUCT_FAILED',
                message: '更新产品失败',
                details: process.env.NODE_ENV === 'development' ? error.message : undefined
            }
        }, { status: 500 })
    }
}

/**
 * DELETE /api/products/[id] - 删除产品
 */
export async function DELETE(request, { params }) {
    try {
        const { id } = params

        // 验证 ID 格式
        if (!id || typeof id !== 'string') {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'INVALID_PRODUCT_ID',
                    message: '无效的产品 ID'
                }
            }, { status: 400 })
        }

        // 从请求中提取用户ID（用于RLS）
        const userId = extractUserIdFromRequest(request)

        // 检查产品是否存在
        const existingProduct = await getProductById(id, userId)
        if (!existingProduct) {
            return NextResponse.json({
                success: false,
                error: {
                    code: 'PRODUCT_NOT_FOUND',
                    message: '产品不存在'
                }
            }, { status: 404 })
        }

        // 删除产品
        await deleteProduct(id, userId)

        return NextResponse.json({
            success: true,
            data: {
                message: '产品删除成功'
            }
        })

    } catch (error) {
        console.error('删除产品失败:', error)

        return NextResponse.json({
            success: false,
            error: {
                code: 'DELETE_PRODUCT_FAILED',
                message: '删除产品失败',
                details: process.env.NODE_ENV === 'development' ? error.message : undefined
            }
        }, { status: 500 })
    }
}